package com.malachi.plugin.validateattr.annotation;

import com.malachi.plugin.validateattr.service.DateValidateAdapter;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义属性验证注解
 * <p>
 * 默认值不允许变更
 *
 * @author malachi
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AttrValidate {
    /**
     * 属性名称
     */
    String name();

    /**
     * 属性类型
     */
    TypeEnum type() default TypeEnum.STRING;

    /**
     * 必填属性
     */
    boolean required() default false;

    /**
     * 字符串最大长度
     */
    int maxLength() default 64;

    /**
     * 是否为正数(大于0的正数)
     */
    boolean positive() default true;

    /**
     * 是否为正整数(大于0的整数) 只有 Integer、Long 才会验证
     */
    boolean positiveInteger() default true;

    /**
     * 小数位数 bigDecimal使用
     */
    int scale() default 2;

    /**
     * 数字类型的最大值
     */
    long maxValue() default 99999;

    /**
     * 数字类型的最小值
     */
    long minValue() default 0;

    /**
     * 日期格式
     */
    String datePattern() default "yyyy-MM-dd HH:mm:ss";

    /**
     * 日期验证适配器
     */
    Class<?> dateValidateAdapter() default DateValidateAdapter.class;

    /**
     * 枚举类路径
     */
    String classPath() default "";

    /**
     * 字典类型
     */
    String dictType() default "";

    /**
     * 字典值类型 value 为字典的值；label 为字典的标签
     */
    String dictValueType() default "value";

    /**
     * 固定值
     */
    String fixedValue() default "";

    enum TypeEnum {
        STRING("String"),
        INTEGER("Integer"),
        LONG("Long"),
        BIGDECIMAL("BigDecimal"),
        DATE("Date"),
        BOOLEAN("Boolean"),
        ENUM("enum"),
        DICT("dict"),
        FIXEDVALUE("fixedValue");

        TypeEnum(String value) {
            this.value = value;
        }

        private final String value;

        public String value() {
            return this.value;
        }
    }

}
